import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class GestionPartie {

	GestionParcelle gparcelle = null;
	GestionPaysan gpaysan = null;
	public Meteo meteo = null;
	public boolean tempsLibre, action, argentLibre;
	public String nomMarchandise;
	public int argent;

	public GestionPartie() {

	}

	// public void ouvrirPartie(String name) throws PasdePartieException{
	// throw new PasdePartieException("Pas de partie sous ce nom");
	// }

	public static void main(String[] args) {
		GestionPartie gp = new GestionPartie();
		GestionParcelle gpar = new GestionParcelle();
		GestionPaysan gpay = new GestionPaysan();
		Meteo mete = new Meteo();
		gp.meteo = mete;
		gp.gparcelle = gpar;
		gp.gpaysan = gpay;
		gp.argent = 100;
		gpay.ajouterPaysan("Robert");
		gpay.ajouterPaysan("Raymond");
		gpar.ajouterParcelle("ruisseau");
		gpar.ajouterParcelle("le petit bois");
		gp.etatPaysan("Robert");
		gp.finDeJournee();
		gp.etatPaysan("Robert");
		gp.etatParcelle("ruisseau");
		gp.etatParcelle("le petit bois");
		gp.arroser("Robert", "ruisseau");
		gp.ensemencer("Robert", "ruisseau", "bl�");
		gp.arroser("Robert", "ruisseau");
		gp.arroser("Robert", "ruisseau");
		gp.elever("Raymond", "le petit bois", "cochon");
		gp.nourrire("Raymond", "le petit bois");
		gp.nourrire("Raymond", "ruisseau");
		gp.finDeJournee();
		gp.etatParcelle("ruisseau");
		gp.etatParcelle("le petit bois");
		gp.finDeJournee();
		gp.etatParcelle("ruisseau");
		gp.etatParcelle("le petit bois");
		gp.finDeJournee();
		gp.etatParcelle("ruisseau");
		gp.etatParcelle("le petit bois");
		// sauverPartie(gpar, "enrgparc.dat");
		// sauverPartie2(garc, "enregpay.dat");
		// gp.gparcelle = ouvrirPartie("enregparc.dat");
		// System.out.println(gp.gparcelle.terrain[0][0].getParcelleState());
	}

	public static GestionParcelle ouvrirPartie(String name) {
		GestionParcelle gparcelleLue = null;
		try {
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
					name));
			gparcelleLue = (GestionParcelle) ois.readObject();
			ois.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

			System.out.println("Le fichier n'existe pas");

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return gparcelleLue;
	}

	public static void sauverPartie(GestionParcelle gp, String name) {
		try {
			ObjectOutputStream oos = new ObjectOutputStream(
					new FileOutputStream(name));
			oos.writeObject(gp);
			oos.close();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void arroser(String namePaysan, String nameParcelle) {
		if (gpaysan.isPaysanLibre(namePaysan, 2)) {
			tempsLibre = true;
		} else {
			System.out.println("pas assez de temps pour arroser");
			tempsLibre = false;
		}
		if (argent >= 2) {
			argentLibre = true;
		} else {
			System.out.println("pas assez d'argent pour arroser");
			argentLibre = false;
		}

		if (gparcelle.isCaseArrosable(nameParcelle)) {
			action = true;
		} else {
			action = false;
			System.out.println("case non arrosable");
		}

		if (tempsLibre && action && argentLibre) {
			gpaysan.decompter(2, namePaysan);
			argent = argent - 2;
			gparcelle.caseArrosee(nameParcelle, 1);
			System.out.println("la parcelle " + nameParcelle
					+ " a �t� arros� par " + namePaysan);
		}
		// rajouter qqchose
	}

	public void ensemencer(String namePaysan, String nameParcelle,
			String marchandise) {
		if (gpaysan.isPaysanLibre(namePaysan, 3)) {
			tempsLibre = true;
		} else {
			System.out.println("pas assez de temps pour ensemenser");
			tempsLibre = false;
		}
		if (gparcelle.isCaseLibre(nameParcelle)) {
			action = true;
		} else {
			action = false;
			System.out.println("case non ensemensable");
		}
		if (argent >= 5) {
			argentLibre = true;
		} else {
			System.out.println("pas assez d'argent pour ensemencer");
			argentLibre = false;
		}

		if (tempsLibre && action && argentLibre) {
			argent = argent - 5;
			System.out.println("la parcelle " + nameParcelle
					+ " a �t� ensemencer par " + namePaysan);
			gparcelle.ensemenser(nameParcelle, marchandise);
		}
	}

	public void elever(String namePaysan, String nameParcelle,
			String marchandise) {
		if (gpaysan.isPaysanLibre(namePaysan, 3)) {
			tempsLibre = true;
		} else {
			System.out.println("pas assez de temps pour installer des"
					+ marchandise + "s");
			tempsLibre = false;
		}
		if (gparcelle.isCaseLibre(nameParcelle)) {
			action = true;
		} else {
			action = false;
			System.out.println("La parcelle: " + nameParcelle
					+ " est deja prise");
		}
		if (argent >= 5) {
			argentLibre = true;
		} else {
			System.out.println("pas assez d'argent pour �lever des"
					+ marchandise + "s");
			argentLibre = false;
		}

		if (tempsLibre && action && argentLibre) {
			System.out.println("Des " + marchandise
					+ "s ont �t� install� sur la parcelle: " + nameParcelle
					+ " par " + namePaysan);
			gparcelle.elever(nameParcelle, marchandise);
			argent = argent - 5;
		}
	}

	public void nourrire(String namePaysan, String nameParcelle) {

		if (gparcelle.isCaseAnimal(nameParcelle)) {
			action = true;
			nomMarchandise = gparcelle.dicoparcelle.get(nameParcelle)
					.getMarchandise();
		} else {
			action = false;
			System.out.println("La parcelle: " + nameParcelle
					+ " ne contient pas d'animaux");
		}

		if (gpaysan.isPaysanLibre(namePaysan, 3)) {
			tempsLibre = true;
		} else {
			System.out.println("pas assez de temps pour nourrir les"
					+ nomMarchandise + "s");
			tempsLibre = false;
		}
		if (argent >= 1) {
			argentLibre = true;
		} else {
			System.out.println("pas assez d'argent pour nourrir les "
					+ nomMarchandise + "s");
			argentLibre = false;
		}

		if (tempsLibre && action && argentLibre) {
			System.out.println("Les " + nomMarchandise
					+ "s ont �t� nourris sur la parcelle: " + nameParcelle
					+ " par " + namePaysan);
			gparcelle.nourrir(nameParcelle);
			argent = argent - 1;

		}
		nomMarchandise = "";
	}

	public void recolter(String namePaysan, String nameParcelle) {
		if (gpaysan.isPaysanLibre(namePaysan, 3)) {
			tempsLibre = true;
		} else {
			System.out.println("pas assez de temps pour r�colter");
			tempsLibre = false;
		}

		if (gparcelle.isCaseRecoltable(nameParcelle)) {
			action = true;
		} else {
			action = false;
			System.out.println("case non r�coltable");
		}
		if (argent >= 1) {
			argentLibre = true;
		} else {
			System.out.println("pas assez d'argent pour r�colter");
			argentLibre = false;
		}
		if (tempsLibre && action && argentLibre) {
			gpaysan.decompter(3, namePaysan);
			gparcelle.caseRecolte(nameParcelle);
			argent = argent - 1;
			System.out.println("la parcelle " + nameParcelle
					+ " a �t� r�colt�e par " + namePaysan);
		}
	}

	public void finDeJournee() {
		System.out.println("fin de journ�e");
		gpaysan.finDeJournee();
		gparcelle.finDeJournee(meteo.getEau(), meteo.getSoleil());
		for (String k : gparcelle.dicoparcelle.keySet()) {
			if (gparcelle.dicoparcelle.get(k).verifierEtatAnimaux() == "attention") {
				System.out.println("les "
						+ gparcelle.dicoparcelle.get(k).getMarchandise()
						+ "s doivent imperativement etre nourri");
			}
			if (gparcelle.dicoparcelle.get(k).verifierEtatAnimaux() == "trop tard") {
				System.out.println("les "
						+ gparcelle.dicoparcelle.get(k).getMarchandise()
						+ "s sont mort");
				gparcelle.jachere(k);
			}
		}
	}

	public void etatParcelle(String nameParcelle) {
		System.out.println(nameParcelle + " : "
				+ gparcelle.dicoparcelle.get(nameParcelle).getParcelleState());
	}

	public void etatPaysan(String namePaysan) {
		System.out.println("temps:" + gpaysan.dico.get("Robert").getTemps());
	}

}
